package com.ithappy.oop;

import java.util.Objects;

/*
* 测试Object中的equals()方法
* 重写equals()*/
public class TestEquals extends Object{
    int id;
    String name;
    String password;

    public TestEquals(int id,String name,String password){
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public static void main(String[] args) {
        TestEquals t1 = new TestEquals(1001,"wyw","666");
        TestEquals t2 = new TestEquals(1001,"wyw","666");
        System.out.println(t1.toString());
        System.out.println(t2.toString());
        //equals()默认比较的对象的是哈希值，而不是属性值
        System.out.println(t1.equals(t2));
    }


    @Override
    public boolean equals(Object o) {
        // 如果是同一个对象，直接返回true
        if (this == o) return true;

        // 如果传入的对象为空，或者传入对象的类型与当前对象的类型不同，返回false
        if (o == null || getClass() != o.getClass()) return false;

        // 将传入的对象强制转换为当前类的对象
        TestEquals that = (TestEquals) o;

        // 比较两个对象的属性值是否相等
        // 首先比较id属性（假设id是基本数据类型），如果不相等直接返回false
        // 然后使用Objects.equals()比较name和password属性，处理可能为null的情况
        return id == that.id && Objects.equals(name, that.name) && Objects.equals(password, that.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, password);
    }
}
